home *** CD-ROM | disk | FTP | other *** search
/ Aminet 41 / Aminet 41 (2001)(Schatztruhe)[!][Feb 2001].iso / Aminet / misc / sci / Denise4_2.lha / Denise4_2 / source / include / grama2.cpp < prev    next >
Text File  |  2000-11-04  |  16KB  |  479 lines

  1. /*
  2.                                 Denise-MYTH Artificial Intelligence.
  3.  
  4.                                   Copyright (C) 2000 Szymon Jessa
  5.  
  6.                                          WERSJA ANGIELSKA:
  7.  
  8. This  program  is free software; you can redistribute it and/or modify it under the terms of the GNU
  9. General  Public  License  as  published  by  the  Free  Software Foundation; either version 2 of the
  10. License, or (at your option) any later version.
  11.  
  12. This  program  is  distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
  13. even  the  implied  warranty  of  MERCHANTABILITY  or  FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. General Public License for more details.
  15.  
  16. You  should  have received a copy of the GNU General Public License along with this program; if not,
  17. write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18.  
  19.                                            WERSJA POLSKA:
  20.  
  21. Niniejszy   program   jest  oprogramowaniem  wolnodostëpnym;  moûesz  go  rozprowadzaê  dalej  i/lub
  22. modyfikowaê na warunkach Powszechnej Licencji Publicznej GNU, wydanej przez Fundacjë Wolnodostëpnego
  23. Oprogramowania - wedîug wersji 2-giej tej Licencji lub którejô z póúniejszych wersji.
  24.  
  25. Niniejszy   program  rozpowszechniany  jest  z  nadziejâ,  iû  bëdzie  on  uûyteczny  -  jednak  BEZ
  26. JAKIEJKOLWIEK  GWARANCJI,  nawet  domyôlnej  gwarancji  PRZYDATNOÔCI  HANDLOWEJ albo PRZYDATNOÔCI DO
  27. OKREÔLONYCH ZASTOSOWAÏ. W celu uzyskania bliûszych informacji - Powszechna Licencja Publiczna GNU.
  28.  
  29. Z  pewnoôciâ  wraz  z niniejszym programem otrzymaîeô teû egzemplarz Powszechnej Licencji Publicznej
  30. GNU; jeôli nie - napisz do Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  31.  
  32.                                               KONTAKT:
  33.  
  34. snail: Szymon Jessa, ul. Warszawska 20/6, 89-600 Chojnice,
  35. email: smoczek@ue.eti.pg.gda.pl (ew. noco@box43.gnet.pl)
  36. phone: (052) 39-707-88
  37.  
  38. ****************************************************************************************************
  39. */
  40. /*
  41. KOMENTARZE:
  42. ?  - oznacza, ûe dany warunek nie jest na 100% poprawny gramatycznie
  43. // - oznacza, ûe dany warunek nie jest uwzglëdniony w funkcji
  44. */
  45.  
  46. // *************************
  47. // * * * P O D M I O T * * *
  48. // *************************
  49.  
  50. char FROM czy_podmiot(char nr_grupy)
  51. {
  52.     // nie przeprowadza sië kontroli, czy wyraz jest nieokreôlony,
  53.     // bo nie ma to sensu - nie wymaga komentarza...
  54.  
  55.     // podmiot musi byê grupâ z poziomu 0
  56.     if (skladnia.poziom[nr_grupy]!=0) return RESULT_NO_OK;
  57.  
  58.    // podmiot musi skîadaê sië z jednego wyrazu
  59.    if (grupa[nr_grupy].ile_wyrazow>1) return RESULT_NO_OK;
  60.  
  61.     switch (*ptr_czesc_mowy(grupa[nr_grupy].dane))
  62.     {
  63.         // jeôli jest rzeczownikiem
  64.         case RZECZOWNIK:
  65.             // musi byê zaîoûony podmiot okreôlony
  66.             if (skladnia.typ_podmiotu!=PODMIOT_OKRESLONY) return RESULT_NO_OK;
  67.             // musi byê w mianowniku lub dopeîniacziu
  68.             if (*ptr_przypadek(grupa[nr_grupy].dane)!=MIANOWNIK && *ptr_przypadek(grupa[nr_grupy].dane)!=DOPELNIACZ) return RESULT_NO_OK;
  69.             return RESULT_OK;
  70.  
  71.         // jeôli jest zaimkiem rzeczownym
  72.         case ZAIMEK_RZECZOWNY:
  73.             // musi byê zaîoûony podmiot zaimkowy
  74.             if (skladnia.typ_podmiotu!=PODMIOT_ZAIMKOWY) return RESULT_NO_OK;
  75.             // musi byê zaimkiem osobowym lub pytajâcym
  76.          switch (*ptr_zaimek_funkcja(grupa[nr_grupy].dane))
  77.          {
  78.             // zaimek osobowy/pytajâcy (zwykle "kto/co")
  79.             case ZAIMEK_OSOBOWY:
  80.             case ZAIMEK_PYTAJACY:
  81.                break;
  82.  
  83.             // w przeciwnym razie
  84.             deafult: return RESULT_NO_OK;
  85.          }
  86.             // musi byê w mianowniku lub dopeîniacziu
  87.             if (*ptr_przypadek(grupa[nr_grupy].dane)!=MIANOWNIK && *ptr_przypadek(grupa[nr_grupy].dane)!=DOPELNIACZ) return RESULT_NO_OK;
  88.             return RESULT_OK;
  89.  
  90.         // jeôli jest bezokolicznikiem
  91.         case BEZOKOLICZNIK:
  92.             // musi byê zaîoûony podmiot okreôlony
  93.             if (skladnia.typ_podmiotu!=PODMIOT_ZAIMKOWY) return RESULT_NO_OK;
  94.             return RESULT_OK;
  95.  
  96.         // jeôli jest innâ czëôciâ mowy
  97.         default:
  98.                         return RESULT_NO_OK;
  99.     }
  100. }
  101.  
  102. char FROM podmiot(void)
  103. {
  104.     /*
  105.     podmiot jest nadrzëdnâ czëôciâ zdania i niczego nie okreôla
  106.  
  107.     warunek ogólny:
  108.     - podmiot nie ma wyrazu nadrzëdnego
  109. ?  - podmiot skîada sië z jednego wyrazu
  110.  
  111.     podmiot to czëôê mowy:
  112.     - rzeczownik
  113.         - w mianowniku lub w dopeîniaczu
  114.     - zaimek rzeczowny
  115.         - osobowy
  116.         - w mianowniku lub w dopeîniaczu
  117.     - bezokolicznik
  118.  
  119.     podmiot moûe byê:
  120.     - bezpoôrednio okreôlony
  121.     - zaimkowy (DENISE, ROZMÓWCA, TEMAT)
  122.     - domyôlny (DENISE, ROZMÓWCA, TEMAT)
  123.     */
  124.  
  125.     char nr_grupy;
  126.  
  127.     switch (skladnia.typ_podmiotu)
  128.     {
  129.         case PODMIOT_OKRESLONY:
  130.         case PODMIOT_ZAIMKOWY:
  131.             for (nr_grupy=0;nr_grupy<sentence.ile_grup;nr_grupy++)
  132.             {
  133.                 if (czy_podmiot(nr_grupy)==RESULT_OK)
  134.                 {
  135.                     skladnia.funkcja[nr_grupy]=PODMIOT;
  136.                     skladnia.podmiot=nr_grupy;
  137.                     return RESULT_OK;
  138.                 }
  139.             }
  140.             return RESULT_NO_OK;
  141.         case PODMIOT_DOMYSLNY: return RESULT_OK;
  142.         default: con_put("bîâd: podmiot bîëdnie zdefiniowany\n"); return RESULT_NO_OK;
  143.     }
  144. }
  145.  
  146. // **********************************************
  147. // * * * O R Z E C Z E N I E  I M I E N N E * * *
  148. // **********************************************
  149.  
  150. char FROM czy_lacznik(char nr_grupy)
  151. {
  152.     // nie przeprowadza sië kontroli, czy wyraz jest nieokreôlony,
  153.     // bo nie ma to sensu - tylko podmiot zostaî do tej pory okreôlony
  154.  
  155.     // nadrzëdna grupa musi byê podmiotem w zdaniu, czyli wyraz MUSI
  156.     // byê na poziomie 1, nie innym
  157.     if (skladnia.poziom[nr_grupy]!=1) return RESULT_NO_OK;
  158.  
  159.     // musi to byê czasownik osobowy
  160.     if (*ptr_czesc_mowy(grupa[nr_grupy].dane)!=CZASOWNIK_OSOBOWY) return RESULT_NO_OK;
  161.  
  162.     // musi to byê wyraz: byê,(staê sië),zostaê
  163.     if (cmp_wyraz_podst(nr_grupy,"byê")==RESULT_NO_OK && cmp_wyraz_podst(nr_grupy,"zostaê")==RESULT_NO_OK) return RESULT_NO_OK;
  164.  
  165.    // jeôli to forma "to"
  166.    if (cmp_wyraz_odm(nr_grupy,"to")==RESULT_OK)
  167.    {
  168.       // to musi staê ZA podmiotem
  169.       if (nr_grupy<skladnia.podmiot) return RESULT_NO_OK;
  170.    }
  171.  
  172.     // zaleûnie od tego jakâ czëôciâ mowy jest podmiot róûne warunki
  173.     switch (get_czesc_mowy_podmiot())
  174.     {
  175.         case RZECZOWNIK:
  176.         case ZAIMEK_RZECZOWNY: // dziëki *ptr_ moûna stosowaê ogólne funkcje
  177.             // czy liczba zgodna z podmiotem
  178.             if (*ptr_liczba(grupa[nr_grupy].dane)!=get_liczba_podmiot()) return RESULT_NO_OK;
  179.  
  180.             // czy rodzaj zgodny z podmiotem (dla czasu nie teraúniejszego)
  181.             if (*ptr_czas(grupa[nr_grupy].dane)!=CZAS_TERAZNIEJSZY)
  182.             {
  183.                 // liczba pojedyncza i mnoga osobno
  184.                 if (rodzaj_zgodny(*ptr_czesc_mowy(grupa[nr_grupy].dane),*ptr_liczba(grupa[nr_grupy].dane),*ptr_rodzaj(grupa[nr_grupy].dane),
  185.                                         get_czesc_mowy_podmiot(),get_liczba_podmiot(),get_rodzaj_podmiot())==RESULT_NO_OK) return RESULT_NO_OK;
  186.             }
  187.             return RESULT_OK;
  188.  
  189.         case BEZOKOLICZNIK:
  190.             // czasownik musi byê w 3 osobie
  191.             if (*ptr_osoba(grupa[nr_grupy].dane)!=3) return RESULT_NO_OK;
  192.             // czasownik w liczbie pojedynczej
  193.             if (*ptr_liczba(grupa[nr_grupy].dane)!=1) return RESULT_NO_OK;
  194.             return RESULT_OK;
  195.     }
  196.  
  197.     return RESULT_NO_OK;
  198. }
  199.  
  200. char FROM lacznik(void)
  201. {
  202.    /*
  203.     îâcznik okreôla czëôê zdania:
  204.    - podmiot
  205.  
  206.    warunek ogólny:
  207.    - îâcznik moûe byê tylko jeden
  208.  
  209.    îâcznik to czëôê mowy:
  210.    - czasownik osobowy: byê,(staê sië),zostaê ("to" - jest formâ "byê")
  211.       <gdy jest to forma "to">
  212.       - musi staê ZA podmiotem
  213.       <gdy okreôla podmiot - rzeczownik>
  214.       - ta sama liczba co rzeczownik
  215.       - ten sam rodzaj, ale:
  216.         - w czasie terazniejszym czasownik nie uwzglednia rodzaju
  217.         - w liczbie mnogiej czasownika tylko dwa rodzaje
  218.       <gdy okreôla podmiot - zaimek rzeczowny>
  219.       - ta sama liczba co zaimek
  220.       - ten sam rodzaj, ale:
  221.         - w czasie terazniejszym czasownik nie uwzglednia rodzaju
  222.         - w liczbie mnogiej czasownika tylko dwa rodzaje
  223.       - osoba zgodna z osobâ odpowiadajâcâ zaimkowi
  224.       <gdy okreôla podmiot - bezokolicznik>
  225.         - musi byê w 3 osobie
  226.       - musi byê w liczbie pojedynczej
  227.    */
  228.  
  229.    char founded=0,nr_grupy;
  230.  
  231.    for (nr_grupy=0;nr_grupy<sentence.ile_grup;nr_grupy++)
  232.    {
  233.       if (czy_lacznik(nr_grupy)==RESULT_OK)
  234.       {
  235.             // îâcznik moûe byê tylko jeden (jak nieômiertelny)
  236.          if (founded==1)
  237.          {
  238.             if (view.skladnia==KOD_TRUE) con_put("bîâd: odnaleziono nadmiarowe îâczniki\n");
  239.             return RESULT_NO_OK;
  240.          }
  241.  
  242.          founded=1;
  243.          skladnia.funkcja[nr_grupy]=LACZNIK;
  244.          skladnia.orzeczenie=nr_grupy;
  245.         }
  246.    }
  247.  
  248.     if (founded==1) return RESULT_OK;
  249.     return RESULT_NO_OK;
  250. }
  251.  
  252. char FROM czy_orzecznik(char nr_grupy)
  253. {
  254.     // nie przeprowadza sië kontroli, czy wyraz jest nieokreôlony,
  255.     // bo nie ma to sensu - spowolniîoby to rozbiór na tym etapie
  256.  
  257.    // orzecznik skîadaê sië musi z jednego wyrazu
  258.    if (grupa[nr_grupy].ile_wyrazow>1) return RESULT_NO_OK;
  259.  
  260.     // nadrzëdna grupa musi byê îâcznikiem
  261.     if (skladnia.zwiazek[nr_grupy]!=skladnia.orzeczenie) return RESULT_NO_OK;
  262.  
  263.     switch (*ptr_czesc_mowy(grupa[nr_grupy].dane))
  264.     {
  265.         // jeôli to rzeczownik lub wyraûenie przyimkowe lub zaimek rzeczowny
  266.         case RZECZOWNIK:
  267.         case ZAIMEK_RZECZOWNY:
  268.             // jeôli to sam rzeczownik lub zaimek rzeczowny, bez przyimka
  269.             if (grupa[nr_grupy].ile_wyrazow==1)
  270.             {
  271.                 // w przypadku narzuconym przez îâcznik
  272.                 if (*ptr_przypadek(grupa[nr_grupy].dane)!=get_przyp_narzuc_orzeczenie()) return RESULT_NO_OK;
  273.                 return RESULT_OK;
  274.             }
  275.             // jeôli to rzeczownik lub zaimek rzeczowny z przyimkiem
  276.             else
  277.             {
  278.                 // stoi za orzeczeniem
  279.                 if (nr_grupy<skladnia.orzeczenie) return RESULT_NO_OK;
  280.                 return RESULT_OK;
  281.             }
  282.         // jeôli to przymiotnik lub zaimek przymiotny lub imiesîów przymiotnikowy
  283.         case PRZYMIOTNIK:
  284.         case ZAIMEK_PRZYMIOTNY:
  285.       case IMIESLOW_PRZYMIOTNIKOWY:
  286.          // îâcznik nie moûe byê czasownikiem 'to' (byê)
  287.          if (cmp_wyraz_odm(skladnia.orzeczenie,"to")==RESULT_OK) return RESULT_NO_OK;
  288.  
  289.             // podmiot musi byê rzeczownikiem lub zaimkiem rzeczownym
  290.             if (get_czesc_mowy_podmiot()!=RZECZOWNIK && get_czesc_mowy_podmiot()!=ZAIMEK_RZECZOWNY) return RESULT_NO_OK;
  291.  
  292.             // POZYCJA W ZDANIU
  293.             switch (sentence.oznajm_pyt)
  294.             {
  295.                 case ZDANIE_OZNAJMUJACE:
  296.                     // poîoûenie wzglëdem orzeczenia/îâcznika:
  297.                     // orzecznik musi staê za îâcznikiem
  298.                     if (nr_grupy<skladnia.orzeczenie) return RESULT_NO_OK;
  299.                     break;
  300.                 case ZDANIE_PYTAJACE:
  301.                     // jeôli to nie jest zaimek i jeôli podmiot okreôlony
  302.                     if (*ptr_czesc_mowy(grupa[nr_grupy].dane)==PRZYMIOTNIK && skladnia.typ_podmiotu==PODMIOT_OKRESLONY)
  303.                {
  304.                   // orzecznik musi staê za îâcznikiem
  305.                         if (nr_grupy<skladnia.orzeczenie) return RESULT_NO_OK;
  306.                   // orzecznik musi staê za podmiotem
  307.                   if (nr_grupy<skladnia.podmiot) return RESULT_NO_OK;
  308.                }
  309.                     break;
  310.             }
  311.  
  312.             // musi byê w MIANOWNIKU
  313.             if (*ptr_przypadek(grupa[nr_grupy].dane)!=MIANOWNIK) return RESULT_NO_OK;
  314.             // ta sama liczba, co podmiot
  315.             if (*ptr_liczba(grupa[nr_grupy].dane)!=get_liczba_podmiot()) return RESULT_NO_OK;
  316.             // ten sam rodzaj co podmiot, ale uwaga na liczbë mnogâ
  317.             if (*ptr_liczba(grupa[nr_grupy].dane)==LICZBA_POJEDYNCZA)
  318.             {
  319.                 // liczba pojedyncza i mnoga osobno
  320.                 if (rodzaj_zgodny(*ptr_czesc_mowy(grupa[nr_grupy].dane),*ptr_liczba(grupa[nr_grupy].dane),*ptr_rodzaj(grupa[nr_grupy].dane),
  321.                                         get_czesc_mowy_podmiot(),get_liczba_podmiot(),get_rodzaj_podmiot())==RESULT_NO_OK) return RESULT_NO_OK;
  322.             }
  323.             return RESULT_OK;
  324.         // jeôli to przysîówek
  325.         case PRZYSLOWEK:
  326.             // podmiotem musi byê bezokolicznik
  327.             if (get_czesc_mowy_podmiot()!=BEZOKOLICZNIK) return RESULT_NO_OK;
  328.             return RESULT_OK;
  329.  
  330.         // jeôli to inna czëôê mowy
  331.         default:
  332.             return RESULT_NO_OK;
  333.     }
  334. }
  335.  
  336. char FROM orzecznik(void)
  337. {
  338.     /*
  339.     orzecznik okreôla czëôê zdania:
  340.     - îâcznik
  341.  
  342.     warunek ogólny:
  343.    - orzecznik moûe byê tylko jeden
  344. ?  - skîada sië tylko z jednego wyrazu
  345.    - jako orzecznik przyjmowana jest pierwsza grupa, która speînia pewne warunki
  346.  
  347.    orzecznik to czëôê mowy:
  348.    - rzeczownik lub zaimek rzeczowny
  349.       - w przypadku narzuconym przez îâcznik
  350. //?      - ten sam rodzaj co podmiot
  351.    - wyraûenie przyimkowe
  352.       - stoi za îâcznikiem
  353.    - przymiotnik lub zaimek przymiotny lub imiesîów przymiotnikowy
  354.       <gdy podmiotem jest rzeczownik>
  355.       - nie, jeôli îâcznik jest typu 'to',
  356.       - stoi za îâcznikiem
  357.       - przypadek MIANOWNIK
  358.       - ta sama liczba co podmiot
  359.         - ten sam rodzaj, ale:
  360.             - w liczbie mnogiej przymiotnik ma tylko dwa rodzaje
  361.       <gdy podmiotem jest zaimek rzeczowny>
  362.       - stoi za îâcznikiem
  363.       - przypadek MIANOWNIK
  364.       - ta sama liczba co podmiot
  365.         - ten sam rodzaj, ale:
  366.             - w liczbie mnogiej przymiotnik ma tylko dwa rodzaje
  367.    - przysîówek
  368.       <gdy okreôla bezokolicznik>
  369. //   - liczebnik
  370.    */
  371.  
  372.    char nr_grupy;
  373.  
  374.    for (nr_grupy=0;nr_grupy<sentence.ile_grup;nr_grupy++)
  375.    {
  376.       if (czy_orzecznik(nr_grupy)==RESULT_OK)
  377.       {
  378.          skladnia.funkcja[nr_grupy]=ORZECZNIK;
  379.             return RESULT_OK;
  380.       }
  381.    }
  382.  
  383.    return RESULT_NO_OK;
  384. }
  385.  
  386. // ********************************************************
  387. // * * * O R Z E C Z E N I E  C Z A S O W N I K O W E * * *
  388. // ********************************************************
  389.  
  390. char FROM czy_orzeczenie_czasownikowe(char nr_grupy)
  391. {
  392.     // nadrzëdnâ grupâ musi byê podmiot, czyli poziom koniecznie 1
  393.     if (skladnia.poziom[nr_grupy]!=1) return RESULT_NO_OK;
  394.  
  395.     // musi to byê czasownik osobowy
  396.     if (*ptr_czesc_mowy(grupa[nr_grupy].dane)!=CZASOWNIK_OSOBOWY) return RESULT_NO_OK;
  397.  
  398.     switch (get_czesc_mowy_podmiot())
  399.     {
  400.         // jeôli okreôla rzeczownik lub zaimek rzeczowny
  401.         case RZECZOWNIK:
  402.         case ZAIMEK_RZECZOWNY:
  403.             // liczba zgodna z podmiotem
  404.             if (*ptr_liczba(grupa[nr_grupy].dane)!=get_liczba_podmiot()) return RESULT_NO_OK;
  405.             // czy rodzaj zgodny z podmiotem (dla czasu nie terazniejszego)
  406.             if (*ptr_czas(grupa[nr_grupy].dane)!=CZAS_TERAZNIEJSZY)
  407.             {
  408.                 // liczba pojedyncza i mnoga osobno
  409.                 if (*ptr_liczba(grupa[nr_grupy].dane)==LICZBA_POJEDYNCZA)
  410.                 {
  411.                     // liczba pojedyncza i mnoga osobno
  412.                     if (rodzaj_zgodny(*ptr_czesc_mowy(grupa[nr_grupy].dane),*ptr_liczba(grupa[nr_grupy].dane),*ptr_rodzaj(grupa[nr_grupy].dane),
  413.                                             get_czesc_mowy_podmiot(),get_liczba_podmiot(),get_rodzaj_podmiot())==RESULT_NO_OK) return RESULT_NO_OK;
  414.                 }
  415.             }
  416.             return RESULT_OK;
  417.  
  418.         // jeôli okreôla bezokolicznik
  419.         case BEZOKOLICZNIK:
  420.             // czasownik musi byê w 3 osobie
  421.             if (*ptr_osoba(grupa[nr_grupy].dane)!=OSOBA_TY) return RESULT_NO_OK;
  422.             // czasownik w liczbie pojedynczej
  423.             if (*ptr_liczba(grupa[nr_grupy].dane)!=LICZBA_POJEDYNCZA) return RESULT_NO_OK;
  424.             return RESULT_OK;
  425.         default:
  426.             return RESULT_NO_OK;
  427.     }
  428. }
  429.  
  430. char FROM orzeczenie_czasownikowe(void)
  431. {
  432.     /*
  433.     orzeczenie okreôla czëôê zdania:
  434.     - podmiot
  435.  
  436.    warunek ogólny:
  437.    - orzeczenie moûe byê tylko jedno
  438.    - orzeczenie moûe byê tylko na poziomie 1
  439.  
  440.    orzeczenie czasownikowe/imienne to czëôê mowy:
  441.    - czasownik osobowy
  442.       <gdy okreôla rzeczownik>
  443.       - liczba ta sama co dla podmiotu
  444.         - rodzaj ten sam co podmiotu, ale:
  445.          - w czasie teraúniejszym czasownik nie uwzglëdnia rodzaju
  446.          - w liczbie mnogiej czasownika tylko dwa rodzaje
  447.         <gdy okreôla zaimek rzeczowny>
  448.       - liczba ta sama co dla podmiotu
  449.       - rodzaj ten sam co podmiotu, ale:
  450.          - w czasie teraúniejszym czasownik nie uwzglëdnia rodzaju
  451.          - w liczbie mnogiej czasownika tylko dwa rodzaje
  452.       - osoba zgodna z osobâ odpowiadajâcâ zaimkowi
  453.       <gdy okreôla bezokolicznik>
  454.       - czasownik w 3 osobie
  455.       - czasownik w liczbie pojedynczej
  456.    */
  457.  
  458.    char founded=0,nr_grupy;
  459.  
  460.    for (nr_grupy=0;nr_grupy<sentence.ile_grup;nr_grupy++)
  461.     {
  462.         if (czy_orzeczenie_czasownikowe(nr_grupy)==RESULT_OK)
  463.         {
  464.             // orzeczenie moûe byê tylko jedno (kolejny nieômiertelny?)
  465.             if (founded==1)
  466.             {
  467.                 if (view.skladnia==KOD_TRUE) con_put("bîâd: odnaleziono nadmiarowe orzeczenia\n");
  468.             return RESULT_NO_OK;
  469.          }
  470.          founded=1;
  471.          skladnia.funkcja[nr_grupy]=ORZECZENIE_CZASOWNIKOWE;
  472.          skladnia.orzeczenie=nr_grupy;
  473.       }
  474.    }
  475.  
  476.    if (founded==1) return RESULT_OK;
  477.    return RESULT_NO_OK;
  478. }
  479.